#include <iostream>
using namespace std;

class Data 
{
public: 
	int a, b, c; 
	
	void print() const 
	{
		cout << a << "," << b << "," << c << endl;
	}
};

int main( )
{
	Data d;
	Data* dp = &d;
	
	//error: int* pmInt = &Data::a;
	int Data::*pmInt = &Data::a; //类的封装性使得Data内部的a对外不可见，我们写了个新类型 int Data::*
	
	/*
		我们定义的 int Data::* 类型并不是一个简单的指针类型，而是一个Data类作用域下的指针类型，
		由于类中的数据只能通过对象访问，所以我们的指针 pmInt 在访问时也需要通过对象才可以调用。
	*/
	dp->*pmInt = 47; 

	pmInt = &Data::b; 
	d.*pmInt = 48;

	pmInt = &Data::c;
	dp->*pmInt = 49;
	
	dp->print();
}